perm filename ACK3.PAS[PAS,SYS] blob sn#452529 filedate 1979-06-28 generic text, type T, neo UTF8
  PROGRAM ACK3;
VAR
  STACK:ARRAY[1..1000] OF INTEGER;
  X,Y,STACK←COUNT,TIME,A:INTEGER;

  PROCEDURE PUSH(K:INTEGER);
   BEGIN
    STACK←COUNT:=STACK←COUNT+1;
    STACK[STACK←COUNT]:=K;
   END (* OF PUSH *);

  PROCEDURE POP(VAR K:INTEGER);
   BEGIN
    K:=STACK[STACK←COUNT];
    STACK←COUNT:=STACK←COUNT-1;
   END (* OF POP *);

  FUNCTION ACKER(X,Y:INTEGER):INTEGER;
  CONST
    STACKEND=-1;
   BEGIN
    STACK←COUNT:=0;
    PUSH(STACKEND);
     REPEAT
      IF X=0
      THEN
       BEGIN
        POP(X); Y:=Y+1
       END
      ELSE
       IF Y=0
       THEN
         BEGIN
          Y:=1; X:=X-1
         END
       ELSE
         BEGIN
          PUSH(X-1); Y:=Y-1
         END;
     UNTIL X=STACKEND;
    ACKER:=Y
   END (* OF ACKER *);
  (* HAUPTPROGRAMM *)

 BEGIN
writeln(tty,'ackermann function');
WHILE TRUE DO BEGIN
  WRITE(TTY,'X:');BREAK;
  READ(TTY,X);
  WRITE(TTY,'Y:'); BREAK;
  READ(TTY,Y);
  TIME:=CLOCK;
  A:=ACKER(X,Y);
  TIME:=CLOCK-TIME;
  WRITELN(TTY,'  ACKERMANN(',X:2,',',Y:2,')=',A:4);
  WRITELN(TTY,'    CPU-ZEIT=',TIME:6);
END
 END.
(* OF PROGRAM *)